#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>

#include <sched.h>
#include  <malloc.h>
#include <fcntl.h>


int cloneando();


int main(){

char buffer[256];
char param[10];
int pid;
int status=-1;
int pidhijo;
int res;
int fd;

pid=getpid();
printf("Joc de proves modul 1(PROSO)\n");
printf("Comenza el joc de proves del pid: %d \n", pid);

sprintf(param,"insmod mymodule.ko pid=%d",pid);
printf("Test de carga de modulo(presione una tecla para iniciarlo):\n");
read(0,NULL,1);
fflush(stdout);
system(param);

printf("Test de write correcto(por canal ya abierto - 1):\n");
res=write(1,"write:",8);
if(res<0){printf("Error: write nos devuelve un fallo\n");
}
else{printf("Test de write superado(+1 sysWrite, +1 uso correcto)--->result:OK\n");}

printf("Test de write INcorrecto(por canal NO abierto - 6):\n");
res=write(6,"write :\n",7);
if(res<0){
printf("Test de write superado(+1 sysWrite, +1 uso INcorrecto)--->result:OK\n");}
else{printf("Error: write NO nos devuelve un fallo\n");}


printf("Test de Open INcorrecto(por fichero No creado):\n");
res=open("/home/fichero",O_RDWR|O_TRUNC,0666);
if(res<0){printf("Test de open superado(+1 sysOpen, +1 uso INcorrecto)--->result:OK\n");
		
	}else{
	printf("Error: Open NO nos devuelve un fallo\n");
}

printf("Creacion de fichero /home/fichero:\n");

printf("Test de Open correcto(Creamos fichero ):\n");
fd=open("/home/fichero",O_RDWR|O_CREAT|O_TRUNC,0666);
if(fd<0){
	printf("Error: Open  nos devuelve un fallo  %d\n", res);
		
	}else{
	printf("Test de open superado(+1 sysOpen, +1 uso correcto)--->result:OK\n");
	printf("\nCanal %d Abierto\n", fd);
	
}

printf("Test de Write correcto(por canal Nuevo abierto - %d):\n", fd);
res=write(fd,"write :",7);
if(res<0){
	printf("Error: Write  nos devuelve un fallo\n");
		
	}else{
	printf("Test de Write superado(+1 sysWrite, +1 uso correcto)--->result:OK\n");
	
}

printf("Test de Lseek correcto(por canal Nuevo abierto - %d):\n", fd);
res=lseek (fd, 1, SEEK_SET);
if(res<0){
	printf("Error: Lseek  nos devuelve un fallo\n");
		
	}else{
	printf("Test de Lseek superado(+1 sysLseek, +1 uso correcto)--->result:OK\n");
	
}

printf("Test de Close correcto(por canal Nuevo abierto - %d):\n", fd);
res=close(fd);
if(res<0){
	printf("Error: Close  nos devuelve un fallo\n");
		
	}else{
	printf("Test de Close superado(+1 sysClose, +1 uso correcto)--->result:OK\n");
	printf("\nCanal %d Cerrado\n", fd);
	
}printf("Eliminacion  de fichero /home/fichero:\n");
system("rm /home/fichero");

printf("Test de Lseek INcorrecto(por canal Cerrado - %d):\n", fd);
res=lseek (fd, 1, SEEK_SET);
if(res<0){
	printf("Test de Lseek superado(+1 sysLseek, +1 uso INcorrecto)--->result:OK\n");
		
	}else{
	printf("Error: Lseek NO nos devuelve un fallo\n");
	
	
}

printf("Test de Close INcorrecto(por canal Negativo - (-1)):\n");
res=close(-1);
if(res<0){
	printf("Test de Close superado(+1 sysClose, +1 uso INcorrecto)--->result:OK\n");
		
	}else{
	printf("Error: Close  NO nos devuelve un fallo\n");
	
}




void **pila_hijo;
pila_hijo = malloc(1000);

printf("Test de Clone correcto: \n");
res=clone(cloneando,pila_hijo, CLONE_VM|CLONE_FILES, NULL);
if(res<0){
	printf("Error: Clone nos devuelve un fallo\n");
		
	}else{
	printf("Test de Clone superado(+1 sysClone, +1 uso correcto)--->result:OK\n");
	
	
	
}


printf("Test de Descarga de Modulo correcto:\n");
fflush(stdout);
res=system("rmmod mymodule.ko");
if(res<0){
	printf("Error:Fallo al descargar Modulo\n");
		
	}else{
	printf("Modulo descargado correctamente--->result:OK\n");
	
	
	
}


printf("   \n      MOMENTO DEL RECUENTO      \n");


//execlp("rmmod","rmmod","mymodule.ko",'\0');
exit(0);
}
//}

int cloneando(){}













     
